/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.produtividade.facade;

import br.uniceub.fsw.arquitetura.persistencia.transacao.Transacao;
import br.uniceub.fsw.produtividade.dao.IndiceProdutividadeExternaDAO;
import br.uniceub.fsw.produtividade.vo.IndiceProdutividadeExternaVO;
import br.uniceub.fsw.util.TabelaHtml;
import java.util.ArrayList;
/*import java.util.Date;*/
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Facade da entidade IndiceProdutividadeExterna.
 * 
 * @author Fernando Tenorio
 */
public class IndiceProdutividadeExternaFacade {
    /**
     * Mensagem de retorno do sistema.
     */
    private String message;

    /**
     * Value object do Indice de Produtividade Externa.
     */
    private IndiceProdutividadeExternaVO indiceProdutividadeExternaVo;
    
    /**
     * Objeto de acesso aos dados de Indice de Produtividade Externa.
     */
    private IndiceProdutividadeExternaDAO indiceProdutividadeExternaDao;
    
    /**
     * Construtor da classe.
     */
    public IndiceProdutividadeExternaFacade() {
        this.indiceProdutividadeExternaDao = new IndiceProdutividadeExternaDAO();
        }
    
    /**
     * Getter da mensagem de retorno.
     * 
     * @return Mensagem de retorno.
     */
    public String getMessage() {
        String retorno = null;
        if(this.message == null || this.message.equals("")) {
            retorno = "&nbsp";
        } else {
            retorno = this.message;
        }
        return retorno;
    }

    /**
     * Setter da mensagem de retorno.
     * 
     * @param message Mensagem de retorno.
     */
    public void setMessage(String message) {
        this.message = message;
    }
    
    /**
     * Responsável por executar a operação selecionada pelo Indice de Produtividade Externa.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void operacao(HttpServletRequest req, HttpServletResponse resp) {
        String oper = req.getParameter("operacao");

        if(oper != null)
        {
            if (oper.equals("consultar")) {
                this.consultar(req, resp);
            }
            if (oper.equals("incluir")) {
                this.incluir(req, resp);
            }
            if (oper.equals("alterar")) {
                this.alterar(req, resp);
            }
            if (oper.equals("excluir")) {
                this.excluir(req, resp);
            }
           
        }
    }

        
    /**
     * Retorna o IndiceProdutividadeExterna.
     * 
     * @return Objeto IndiceProdutividadeExterna.
     */
    public IndiceProdutividadeExternaVO getIndiceProdutividadeExterna() {
        return this.indiceProdutividadeExternaVo;
    }
    
    /**
     * Seta o Indice de Produtividade Externa.
     * 
     * @param Indice de Produtividade Externa Objeto Indice de Produtividade Externa.
     */
    public void setIndiceProdutividadeExterna(IndiceProdutividadeExternaVO indiceProdutividadeExternaVo) {
        this.indiceProdutividadeExternaVo = indiceProdutividadeExternaVo;
    }
    
    /**
     * Consultar um indiceProdutividadeExternaVo.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void consultar(HttpServletRequest req, HttpServletResponse resp) {
        String idIndiceProdutividadeExternaTmp = req.getParameter("idIndiceProdutividadeExterna");
        
        Integer idIndiceProdutividadeExterna = null;
        
        if(idIndiceProdutividadeExternaTmp == null || idIndiceProdutividadeExternaTmp.equals("")) {
            return;
        } else {
            idIndiceProdutividadeExterna = Integer.parseInt(idIndiceProdutividadeExternaTmp);
        }
        
        this.indiceProdutividadeExternaVo  = indiceProdutividadeExternaDao.consultarPorId(idIndiceProdutividadeExterna);
    }

    /**
     * Incluir um indiceProdutividadeExterna.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void incluir(HttpServletRequest req, HttpServletResponse resp) {
     /**String cadastro = req.getParameter("cadastro");*/
     /**String referencia = req.getParameter("referencia");*/
        Integer cdTecnologia = Integer.parseInt(req.getParameter("cdTecnologia"));

        indiceProdutividadeExternaVo = new IndiceProdutividadeExternaVO();
        
     /**indiceProdutividadeExternaVo.setCadastro(cadastro); */
        indiceProdutividadeExternaVo.setCodigoPerfil(cdTecnologia);
        indiceProdutividadeExternaVo.setCodigoTalento(cdTecnologia);
        indiceProdutividadeExternaVo.setIndice(cdTecnologia);
     /**indiceProdutividadeExternaVo.setReferencia(referencia);*/
       
        
        String mensagem = null;
        
             
        try {
            Transacao.iniciar();
            
            indiceProdutividadeExternaDao.inserir(indiceProdutividadeExternaVo);
            
            Transacao.efetivar();

            mensagem = "Indice de Produtividade Externa incluído com sucesso.";
            indiceProdutividadeExternaVo = null;
        } catch (Exception ex) {
            Transacao.desfazer();
            
            mensagem = "Problema na inclusão do Indice de Produtividade Externa: " + ex.getMessage();
        }

        this.message = mensagem;
    }

    /**
     * Alterar um indiceProdutividadeExterna.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void alterar(HttpServletRequest req, HttpServletResponse resp) {
        String cadastro = req.getParameter("cadastro");
        String referencia = req.getParameter("referencia");
        Integer cdTecnologia = Integer.parseInt(req.getParameter("cdTecnologia"));
        
        indiceProdutividadeExternaVo = new IndiceProdutividadeExternaVO();
     /**indiceProdutividadeExternaVo.setCadastro(cadastro);*/
        indiceProdutividadeExternaVo.setCodigoPerfil(cdTecnologia);
        indiceProdutividadeExternaVo.setCodigoTalento(cdTecnologia);
        indiceProdutividadeExternaVo.setIndice(cdTecnologia);
     /**indiceProdutividadeExternaVo.setReferencia(referencia);*/
        
        String mensagem = null;
        
              
        try {
            Transacao.iniciar();
            
            indiceProdutividadeExternaDao.alterar(indiceProdutividadeExternaVo);
            
            Transacao.efetivar();
            
            mensagem = "Indice de Produtividade Externa alterado com sucesso.";
        } catch (Exception ex) {
            mensagem = "Problema na alteração do Indice de Produtividade Externa: " + ex.getMessage();
        }
        
        this.message = mensagem;
    }

    /**
     * Excluir um indiceProdutividadeExterna.
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     */
    public void excluir(HttpServletRequest req, HttpServletResponse resp) {
        String cadastro = req.getParameter("cadastro");

        indiceProdutividadeExternaVo = new IndiceProdutividadeExternaVO();
    /** indiceProdutividadeExternaVo.setCadastro(cadastro);*/
        
        String mensagem = null;
        
        try {
            Transacao.iniciar();
            
            indiceProdutividadeExternaDao.excluir(indiceProdutividadeExternaVo);
            
            Transacao.efetivar();
            
            mensagem = "Indice de Produtividade Externa excluído com sucesso.";
        } catch (Exception ex) {
            mensagem = "Problema na exclusão do indice de Produtividade Externa: " + ex.getMessage();
        }
        
        this.indiceProdutividadeExternaVo = null;
        
        this.message = mensagem;
    }
    
    /**
     * Retorna uma lista de indiceProdutividadeExterna a partir de parâmetros da tela
     * 
     * @param req Requisição web do tipo HTTP.
     * @param resp Resposta da requisição HTTP.
     * @return objeto tabela com as informações necessárias
     */
    public TabelaHtml consultarIndiceProdutividadeExterna(HttpServletRequest req, HttpServletResponse resp) {
        String nome = req.getParameter(" ");
        
        if(nome != null && !nome.equals("")) {
            TabelaHtml tabela = new TabelaHtml();
            
            tabela.setCampoRetorno(" ");
            
            tabela.adicionarTitulo(" ");
            tabela.adicionarTamanho(0);
            tabela.adicionarTipo(" ");
            tabela.adicionarStatus(false);

            tabela.adicionarTitulo(" ");
            tabela.adicionarTamanho(80);
            tabela.adicionarTipo(" ");
            tabela.adicionarStatus(true);
            
            tabela.gravarCampos();
            
            // Lista de IndiceProdutividadeExterna
            IndiceProdutividadeExternaVO exemplo = new IndiceProdutividadeExternaVO();
            
            List<IndiceProdutividadeExternaVO> indiceProdutividadeExternas = indiceProdutividadeExternaDao.consultarPorExemplo(indiceProdutividadeExternaVo);
            
            // Adiciona os valores de cada Indice de Produtividade Externa nas listas de ids e nomes
            for(int i = 0; i < indiceProdutividadeExternas.size(); i++) {
                tabela.adicionarRegistro(converterVoParaString(indiceProdutividadeExternas.get(i)));
            }

            return tabela;
        }
        
        return null;
    }
    
    /**
     * Transforma os campos de um VO em uma lista de Strings
     * 
     * @return lista de strings com os valores em ordem
     */
    public List<String> converterVoParaString(IndiceProdutividadeExternaVO indiceProdutividadeExternaVo) {
        List<String> valores = new ArrayList<String>();
        
        valores.add(indiceProdutividadeExternaVo.getCadastro().toString());
        valores.add(indiceProdutividadeExternaVo.getCodigoPerfil().toString());
        valores.add(indiceProdutividadeExternaVo.getCodigoTalento().toString());
     /**valores.add(IndiceProdutividadeExternaVO.getIndice());*/
        valores.add(indiceProdutividadeExternaVo.getReferencia().toString());
        
        return valores;
    }
    
    
    /**
     * Retorna uma lista de habilidades ordenada por nome
     * 
     * @param req RequisiÃ§Ã£o web do tipo HTTP.
     * @param resp Resposta da requisiÃ§Ã£o HTTP.
     * @return lista com as informaÃ§Ãµes necessÃ¡rias
     */
    public List<List> consultarTecnologias(HttpServletRequest req, HttpServletResponse resp) {
        
        List<List> lista = new ArrayList<List>();

        List<String> registro = new ArrayList<String>();
        registro.add("0");
        registro.add("JAVA");
        lista.add(registro);
        return lista;
    }    

    /**
     * Retorna uma lista de habilidades ordenada por nome
     * 
     * @param req RequisiÃ§Ã£o web do tipo HTTP.
     * @param resp Resposta da requisiÃ§Ã£o HTTP.
     * @return lista com as informaÃ§Ãµes necessÃ¡rias
     */
    public List<List> consultarMetrica(HttpServletRequest req, HttpServletResponse resp) {
        
        List<List> lista = new ArrayList<List>();

        List<String> registro = new ArrayList<String>();
        registro.add("0");
        registro.add("PPF");
        lista.add(registro);
        return lista;
    }    

    /**
     * Retorna uma lista de habilidades ordenada por nome
     * 
     * @param req RequisiÃ§Ã£o web do tipo HTTP.
     * @param resp Resposta da requisiÃ§Ã£o HTTP.
     * @return lista com as informaÃ§Ãµes necessÃ¡rias
     */
    public List<List> consultarPerfil(HttpServletRequest req, HttpServletResponse resp) {
        
        List<List> lista = new ArrayList<List>();

        List<String> registro = new ArrayList<String>();
        registro.add("0");
        registro.add("DESENVOLVEDOR");
        lista.add(registro);
        return lista;
    }    

    /**
     * Retorna uma lista de habilidades ordenada por nome
     * 
     * @param req RequisiÃ§Ã£o web do tipo HTTP.
     * @param resp Resposta da requisiÃ§Ã£o HTTP.
     * @return lista com as informaÃ§Ãµes necessÃ¡rias
     */
    public List<List> consultarTipoServico(HttpServletRequest req, HttpServletResponse resp) {
        
        List<List> lista = new ArrayList<List>();

        List<String> registro = new ArrayList<String>();
        registro.add("0");
        registro.add("IMPLEMENTAÃ‡ÃƒO DE CASO DE USO");
        lista.add(registro);
        return lista;
    }    
    
}
